package com.xqboss.apps.constant;

import com.xqboss.system.domain.dto.*;

import java.math.BigDecimal;

/**
 * 系统配置键
 *
 * @author Trent
 * @date 2023/9/4
 */
public class Config {
    public static class Sys {
        // 打卡配置
        public static class Punch {
            public static BigDecimalConfigKey 收益折算系数 = new BigDecimalConfigKey("sys.punch.incomeRatio");
            public static BigDecimalConfigKey 耐久度倍数 = new BigDecimalConfigKey("sys.punch.durabilityRate");
            public static BigDecimalConfigKey 破损度倍数 = new BigDecimalConfigKey("sys.punch.breakageRate");
            public static BigDecimalConfigKey 耐久消耗系数 = new BigDecimalConfigKey("sys.punch.durabilityUseRatio");
            //默认此耐久维修系数为（热豆）
            public static BigDecimalConfigKey 耐久维修系数 = new BigDecimalConfigKey("sys.punch.durabilityRepairsRatio");
            public static BigDecimalConfigKey 耐久维修系数_扳手 = new BigDecimalConfigKey("sys.punch.durabilityRepairsRatio.wrench");
            public static IntConfigKey 维修消耗等级_扳手 = new IntConfigKey("sys.punch.repairsLevel.wrench");
            public static BigDecimalConfigKey 消耗破损值 = new BigDecimalConfigKey("sys.punch.breakageUse");
            public static BigDecimalConfigKey 日打卡收益上限 = new BigDecimalConfigKey("sys.punch.dayIncomeMax");

            public static IntConfigKey 队伍增益上限 = new IntConfigKey("sys.team.incomeMax");
            public static IntConfigKey 队伍打卡次数上限 = new IntConfigKey("sys.team.punchMax");
            public static IntConfigKey 队伍打卡收益上限 = new IntConfigKey("sys.team.punchIncomeMax");
            public static StringConfigKey 队伍增益规则 = new StringConfigKey("sys.team.gainRule");
            public static StringConfigKey 打卡规则说明 = new StringConfigKey("sys.punch.ruleExplain");

            public static StringConfigKey 耐久破损度说明 = new StringConfigKey("sys.punch.npExplain");

            public static BigDecimalConfigKey 提醒打卡点赞送爱心扣减数值 = new BigDecimalConfigKey("sys.punch.upvoteLove");
            public static IntConfigKey 新手引导积分阈值 = new IntConfigKey("sys.beginner.integralLimit");
            public static BigDecimalConfigKey 耐久度收益递减阈值 = new BigDecimalConfigKey("sys.punch.durabilityLimit");
        }

        // 充值配置
        public static class Recharge {
            public static BoolConfigKey 充值功能开启状态 = new BoolConfigKey("sys.recharge.enable", false);
            public static IntArrayConfigKey 支付方式 = new IntArrayConfigKey("sys.recharge.payType");
            public static BoolConfigKey 自定义充值 = new BoolConfigKey("sys.recharge.customAmount", false);
            public static BigDecimalConfigKey 最低充值金额 = new BigDecimalConfigKey("sys.recharge.amountMin");
            public static BigDecimalConfigKey 最高充值金额 = new BigDecimalConfigKey("sys.recharge.amountMax");
            public static StringConfigKey 充值说明 = new StringConfigKey("sys.recharge.explain");
            public static StringConfigKey 充值协议 = new StringConfigKey("sys.recharge.protocol");
        }

        // 提现配置
        public static class Withdraw {
            public static BoolConfigKey 提现功能开启状态 = new BoolConfigKey("sys.withdraw.enable", false);
            public static BigDecimalConfigKey 单次提现最高金额 = new BigDecimalConfigKey("sys.withdraw.amountMax");
            public static BigDecimalConfigKey 单次提现最低金额 = new BigDecimalConfigKey("sys.withdraw.amountMin");
            public static BigDecimalConfigKey 当日提现金额上限 = new BigDecimalConfigKey("sys.withdraw.dayMax");
            public static StringConfigKey 提现说明 = new StringConfigKey("sys.withdraw.explain");
            public static BigDecimalConfigKey 提现手续费比例 = new BigDecimalConfigKey("sys.withdraw.withdrawFeeRatio");
            public static BigDecimalConfigKey 优惠提现手续费比例 = new BigDecimalConfigKey("sys.withdraw.saleWithdrawFeeRatio");
            public static StringConfigKey 提现提示语 = new StringConfigKey("sys.withdraw.prompts");
        }

        // 区块链配置
        public static class Chain {
            public static StringConfigKey 藏品合约地址 = new StringConfigKey("sys.chain.contract");
        }

        // 大麦购配置
        public static class DaMaiGou {
            public static StringArrayConfigKey 大麦购IP白名单 = new StringArrayConfigKey("sys.damaigou.whiteList");
        }

        // 订单相关配置
        public static class Order {
            public static IntConfigKey 订单超时时间 = new IntConfigKey("sys.order.payTimeout", 15);
            public static IntArrayConfigKey 订单支付方式 = new IntArrayConfigKey("sys.order.payType");
            public static IntConfigKey 取消锁单次数 = new IntConfigKey("sys.order.cancelOrderCountLuck", 3);
        }

        // 认证相关配置
        public static class Auth {
            public static BoolConfigKey 是否开启人脸认证 = new BoolConfigKey("sys.auth.faceVerify", true);
            public static IntConfigKey 身份证实名最大账户数量 = new IntConfigKey("sys.auth.idAuthMax", 2);
        }

        public static class Nft {
            public static StringConfigKey 购买须知 = new StringConfigKey("sys.nft.buyKnow");
            public static StringConfigKey 版权声明 = new StringConfigKey("sys.nft.copyrightNotice");
            public static StringConfigKey 转卖须知 = new StringConfigKey("sys.nft.resaleNotice");
            public static StringConfigKey 装备升级说明 = new StringConfigKey("sys.nft.equipment.upgrade.explain");
            public static StringConfigKey 合成规则说明 = new StringConfigKey("sys.nft.synthesis.explain");
            public static LongConfigKey 生产者藏品ID = new LongConfigKey("sys.nft.producerNftId", -1L);
            public static IntConfigKey 融入折扣_身份等级 = new IntConfigKey("sys.nft.identityDiscount");
            public static BigDecimalConfigKey 融入折扣_系数 = new BigDecimalConfigKey("sys.nft.identityDiscountRatio");
            public static IntConfigKey 融入折扣_装备等级 = new IntConfigKey("sys.nft.equipmentLevelDiscount");
        }

        //小金库相关配置
        public static class Treasury {
            //            public static StringConfigKey 小金库解锁说明 = new StringConfigKey("sys.treasury.unlockKnow");
            public static BoolConfigKey 转卖开关 = new BoolConfigKey("sys.treasury.isResell", false);
            public static BoolConfigKey 扳手转卖开关 = new BoolConfigKey("sys.treasury.isWrenchResell", false);
            public static BoolConfigKey 力豆转卖开关 = new BoolConfigKey("sys.treasury.isLidouResell", false);
            public static IntConfigKey 单次最高转卖数量 = new IntConfigKey("sys.treasury.resellNumMax");
            public static IntConfigKey 单次最低转卖数量 = new IntConfigKey("sys.treasury.resellNumMin");

            public static IntConfigKey 扳手单次最高转卖数量 = new IntConfigKey("sys.treasury.wrenchResellNumMax");

            public static IntConfigKey 扳手单次最低转卖数量 = new IntConfigKey("sys.treasury.wrenchResellNumMin");

            public static IntConfigKey 力豆单次最高转卖数量 = new IntConfigKey("sys.treasury.lidouResellNumMax");

            public static IntConfigKey 力豆单次最低转卖数量 = new IntConfigKey("sys.treasury.lidouResellNumMin");

            public static BigDecimalConfigKey 热豆最低价 = new BigDecimalConfigKey("sys.treasury.lowestPrice", BigDecimal.ZERO);
            public static BigDecimalConfigKey 热豆最高价 = new BigDecimalConfigKey("sys.treasury.maxPrice", BigDecimal.ZERO);

            public static BigDecimalConfigKey 扳手最低价 = new BigDecimalConfigKey("sys.treasury.wrenchLowestPrice", BigDecimal.ZERO);

            public static BigDecimalConfigKey 扳手最高价 = new BigDecimalConfigKey("sys.treasury.wrenchMaxPrice", BigDecimal.ZERO);

            public static BigDecimalConfigKey 力豆最低价 = new BigDecimalConfigKey("sys.treasury.lidouLowestPrice", BigDecimal.ZERO);

            public static BigDecimalConfigKey 力豆最高价 = new BigDecimalConfigKey("sys.treasury.lidouMaxPrice", BigDecimal.ZERO);

            public static StringConfigKey 热豆商品图 = new StringConfigKey("sys.treasury.mainImg");

            public static StringConfigKey 扳手商品图 = new StringConfigKey("sys.treasury.wrenchMainImg");

            public static StringConfigKey 力豆商品图 = new StringConfigKey("sys.treasury.lidouMainImg");
        }

        // 用户宝箱相关配置
        public static class Box {
            public static BigDecimalConfigKey 开箱消耗热豆数量 = new BigDecimalConfigKey("sys.box.openBoxUseInteger", BigDecimal.ZERO);
        }

        // 市场相关配置
        public static class Market {
            public static BigDecimalConfigKey 交易费率 = new BigDecimalConfigKey("sys.market.transactionFeeRatio", BigDecimal.ZERO);
            public static BigDecimalConfigKey 最低交易费 = new BigDecimalConfigKey("sys.market.minTransactionFee", BigDecimal.ZERO);
            //单次最高转卖数量：市场限制宝盒每单转卖最高数量
            public static IntConfigKey 单次最高转卖数量 = new IntConfigKey("sys.market.resaleCountMax", 0);
            //限制用户每日发起转卖最高次数
            public static IntConfigKey 典藏_每日转卖次数 = new IntConfigKey("sys.market.nftDayResaleCount", 0);
            public static IntConfigKey 装备_每日转卖次数 = new IntConfigKey("sys.market.equipmentDayResaleCount", 0);
            public static IntConfigKey 宝盒_每日转卖次数 = new IntConfigKey("sys.market.boxDayResaleCount", 0);
            public static IntConfigKey 热豆_每日转卖次数 = new IntConfigKey("sys.market.integralDayResaleCount", 0);

            public static IntConfigKey 扳手_每日转卖次数 = new IntConfigKey("sys.market.wrenchDayResaleCount", 0);
            public static IntConfigKey 力豆_每日转卖次数 = new IntConfigKey("sys.market.lidouDayResaleCount", 0);

            public static IntConfigKey 开启快速抄货最低金额 = new IntConfigKey("sys.market.openQuickCopyMinAmount", 50);
            public static StringArrayConfigKey 转卖次数白名单 = new StringArrayConfigKey("sys.market.resaleWhiteList");

        }

        // 队伍相关配置
        public static class Team {
            //升级开关：默认关闭，关闭后无法升级，前端提示：升级维护中~
            public static BoolConfigKey 升级开关 = new BoolConfigKey("sys.team.upgrade.switch", false);
            //最高等级：队伍最高等级，已有队伍默认为1级，正整数，已创建后不可编辑
            public static IntConfigKey 最高等级 = new IntConfigKey("sys.team.upgrade.maxLevel");
            //人员扩充幅度： 队伍每升一级增加队伍人数可容量，正整数
            public static IntConfigKey 人员扩充幅度 = new IntConfigKey("sys.team.upgrade.expandRange");
            //升级打卡次数叠加：每升一级，增幅规则中的【队伍总打卡次数】同时各增加次数，正整数
            public static IntConfigKey 升级打卡次数叠加 = new IntConfigKey("sys.team.upgrade.punchCount");
            //升级增幅比例叠加：每升一级，增幅规则中的【增幅比例】同时各增加比例
            public static BigDecimalConfigKey 升级增幅比例叠加 = new BigDecimalConfigKey("sys.team.upgrade.increaseRate");
            //家庭主成员奖励抽成：家庭主成员将获得家庭成员额外热豆空投直中的部分数量，家庭成员将减少这部分热豆空投
            public static BigDecimalConfigKey 家庭主成员奖励抽成 = new BigDecimalConfigKey("sys.team.upgrade.familyMemberAward");
            //队长奖励抽成：队伍归属人将获得队伍主成员（除去家庭角色成员）热豆总额外空投中的抽成（获得的抽成 ＋获得的热豆额外空投）
            public static BigDecimalConfigKey 队长奖励抽成 = new BigDecimalConfigKey("sys.team.upgrade.captainAward");
            //队长奖励抽成：队伍归属人将获得队伍主成员（除去家庭角色成员）热豆总额外空投中的抽成（获得的抽成 ＋获得的热豆额外空投）
            public static IntConfigKey 单人当日可打卡次数 = new IntConfigKey("sys.team.upgrade.singlePunchNumber");
        }

        // 公会相关配置
        public static class Guild {
            //会长编辑公会名称需要消耗的热豆数量
            public static BigDecimalConfigKey 编辑公会名称热豆消耗数量 = new BigDecimalConfigKey("sys.guild.edit.name",new BigDecimal(50));
            //主动退出再次加入公会的冷却时间，单位：小时
            public static IntConfigKey 主动退出公会冷却时间 = new IntConfigKey("sys.guild.exit.cool",24);
            //公会说明
            public static StringConfigKey 公会说明 = new StringConfigKey("sys.guild.explain");
            //socket消息推送弹窗关闭时长，单位：分钟
            public static IntConfigKey 消息推送弹窗关闭时长 = new IntConfigKey("sys.guild.socketMag.closeTime",10);
        }

        // 所有游戏配置放这儿
        public static class Game{
            // 材料冲击游戏配置
            public static StringConfigKey 材料冲击游戏配置 = new StringConfigKey("sys.game.conf.materialStrike");
            // 材料冲击配置admin
            public static BigDecimalConfigKey 中奖播报门槛 = new BigDecimalConfigKey("sys.game.conf.materialStrikeAdmin");
            // 游戏公告-躲避调皮蛙
            public static StringConfigKey 游戏公告躲避调皮蛙 = new StringConfigKey("sys.game.notice.avoidFrog");
            // 游戏公告-时来运转
            public static StringConfigKey 游戏公告时来运转 = new StringConfigKey("sys.game.notice.getABreak");
            // 游戏规则-时来运转
            public static StringConfigKey 游戏规则时来运转 = new StringConfigKey("sys.game.notice.getABreak.rule");
            // 游戏公告-炸年兽
            public static StringConfigKey 游戏公告炸年兽 = new StringConfigKey("sys.game.notice.friedNewYearBeast");

        }

        // 运动场
        public static class Sport{
            // 一次性允许最大装备的数量
            public static IntConfigKey 一次性允许最大装备的数量 = new IntConfigKey("sys.sport.employ.maxNumber",100);
            // 一次性允许最大装备的数量
            public static IntConfigKey 几天内注册的用户加入运动场算新人 = new IntConfigKey("sys.sport.team.new.people.limit",3);
            // 间推助力系数,输入0~1的系数
            public static BigDecimalConfigKey 间推助力系数 = new BigDecimalConfigKey("sys.sport.team.indirect.help.factor");

            // 运动场帮助说明
            public static StringConfigKey 运动场帮助说明 = new StringConfigKey("sys.sport.help.explain");
            // 运动场队伍帮助说明
            public static StringConfigKey 运动场队伍帮助说明 = new StringConfigKey("sys.sport.help.team.explain");
            // 运动场队伍帮助说明
            public static StringConfigKey 运动场建设帮助说明 = new StringConfigKey("sys.sport.help.build.explain");
            // 运动场开关
            public static IntConfigKey 运动场开关 = new IntConfigKey("sys.sport.weekend.switch",0);
        }

        // 其他
        public static class Other {
            public static StringConfigKey 扳手邀请规则说明 = new StringConfigKey("sys.wrench.ruleExplain");

            public static StringConfigKey 身份升级规则说明 = new StringConfigKey("sys.identity.ruleExplain");

            public static StringArrayConfigKey 游戏IP白名单 = new StringArrayConfigKey("sys.game.whitelist");

            public static StringConfigKey 扳手生产规则 = new StringConfigKey("sys.wrench.production");

            public static StringConfigKey 扳手生产套餐说明 = new StringConfigKey("sys.wrench.productionConfig");

            public static StringConfigKey 装备熔炼说明 = new StringConfigKey("sys.equipment.smelt.explain");
        }
    }
}
